package com.dom;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/**
 *  dom4j DOM的解析工具
 *
 *  核心类:  SaxReader
 *  作用: 读取指定的xml,整个文件存储到内存,返回对象Document
 *  方法: Document read("xml文件路径") 返回值就是 Document对象
 *
 *  Document对象,表示整个的xml文档
 *  方法:
 *     Element getRootElement() 获取的是文档中的根元素对象
 *     返回值肯定是标签对象: Element
 *
 *  Element对象,表示的是标签对象
 *  方法:
 *        List<Element> elements() 获取所有子标签,返回值结果集合
 *        获取的子标签,也是标签对象
 *
 *        String attributeValue("属性名") 获取标签对象的属性值,返回值String
 *
 *        String getText()获取标签体的文本
 *
 */
public class DomReadXml {
    public static void main(String[] args) throws Exception{
        //创建核心类对象
        SAXReader sax = new SAXReader();
        //sax对象,方法read()读取xml
        //返回对象Document
        Document document =  sax.read("src/main/java/com/dom4j/data.xml");
        //document对象方法,获取根标签 getRootElement()
        Element rootElement =  document.getRootElement();
        //rootElement根标签对象方法  elements()所有子标签
        List<Element> beanElements = rootElement.elements();
        //遍历集合,取出每个bean标签
        for (Element beanElement : beanElements){
            //遍历,变量beanElement,每个子标签bean
            //获取bean标签属性值attributeValue(属性名)
            String id = beanElement.attributeValue("id");
            String className = beanElement.attributeValue("className");
            System.out.println(id+"=="+className);
            //beanElement子标签,获取bean的子标签property
            List<Element> propertyElements = beanElement.elements();
            for (Element propertyElement : propertyElements){
                //propertyElement遍历到的子标签property
                //获取property标签的属性
                String name = propertyElement.attributeValue("name");
                String value = propertyElement.attributeValue("value");
                //获取property标签中的文本
                String text = propertyElement.getText();
                System.out.println("\t"+name+"=="+value+"=="+text);
            }
        }
    }
}
